package org.stvd.repository.admin;

import java.util.List;
import java.util.Map;

import org.stvd.core.dto.QueryResult;
import org.stvd.entities.admin.Roles;
import org.stvd.repository.base.BaseDao;

public interface RolesDao extends BaseDao<Roles> {
    
    /**
     * 根据用户ID获取用户角色信息
     * @param userId
     * @return
     */
    List<Roles> findAllRoleByUid(String userId);
    
    /**
     * @Description: 通过资源ID获取角色列表
     * @param resId 资源ID
     * @return
     */
    List<Roles> findRolesByResId(String resId);

    /**
     * @Description: 通过用户ID和GUID获取角色列表
     * @param userId 用户ID
     * @param guid 平台ID
     * @return
     */
    List<Roles> findRolesByUserId(String userId, String guid);

    /**
     * @Description: 通过机构ID和GUID获取角色列表
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    List<Roles> findRolesByDepId(String depId, String guid);
    
    /**
     * @Description: 通过机构ID和GUID获取启用角色列表
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    List<Roles> findValidRolesByDepId(String depId, String guid);

    /**
     * @Description: 通过条件查询角色集合
     * @param start
     * @param limit
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    QueryResult<Roles> getRoleQueryResult(int start, int limit, String depId, String guid);

    /**
     * 根据角色编码获取角色信息
     * @param roleCode 角色编码
     * @param guid 平台GUID
     * @return
     */
    public Roles getRolesByRoleCode(String roleCode, String guid);
    
    /**
     * 根据条件获取用户未分配的角色及平台信息
     * @param userId 用户ID
     * @param roleCode 角色编码 
     * @return
     */
    List<Map<String, Object>> listUserNoneRoleGuid(String userId, String roleCode);
    
    /**
     * 根据条件获取用户已分配的角色及平台信息
     * @param userId 用户ID
     * @param roleCode 角色编码 
     * @return
     */
    List<Map<String, Object>> listUserRoleGuid(String userId, String roleCode);
    
    /**
     * @Description: 通过GUID获取用户角色列表
     * @param guid 平台ID
     * @return
     */
    List<Map<String, Object>> listUserRolesByGuid(String guid);
    
    /**
     * 根据条件删除用户已分配的角色信息
     * @param userId 用户ID
     * @param roleCode 角色编码 
     * @return
     */
    void deleteUserRoleGuid(String userId, String roleCode);
    
    /**
     * 根据条件删除用户已分配的角色信息
     * @param userId 用户ID
     * @param roleCode 角色编码 
     * @param guid 平台ID
     * @return
     */
    void deleteUserRoleGuid(String userId, String roleCode, String guid);
    
}
